﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using GUILayerWPF.FlightRoutingService;

/// <summary>
/// The GUILayerWPF namespace.
/// </summary>
namespace GUILayerWPF
{
    /// <summary>
    /// Interaction logic for PopUpCustomer.xaml
    /// </summary>
    public partial class PopUpCustomer : Window
    {
        //Variabler initialization
        private static FlightRouteServiceClient client;
        private Customer mainCustomer;
        private List<Customer> myCustomers;
        private int listCount;

        public PopUpCustomer(Customer myCustomer, List<Customer> customers, int count)
        {
            InitializeComponent();
            client = new FlightRouteServiceClient();
            mainCustomer = myCustomer;
            myCustomers = customers;
            GetPersons();
            listCount = count;
        }
        //Create Customer
        private void CreateCustomer()
        {
            try
            {
                Customer newCustomer = new Customer();
                newCustomer.FName = fNameTextBox.Text;
                newCustomer.LName = lNameTextBox.Text;
                newCustomer.Address = addressTextBox.Text;
                newCustomer.ZipCode = Convert.ToInt32(zipCodeTextBox.Text);
                newCustomer.PhoneNo = Convert.ToInt32(phoneNoTextBox.Text);
                newCustomer.PassportNo = passNoTextBox.Text;
                if (phoneNoTextBox.Text.Length != 8)
                {
                    MessageBox.Show("Telefonnummeret SKAL være på 8 cifre.");
                }
                if (zipCodeTextBox.Text.Length != 4)
                {
                    MessageBox.Show("Postnummeret SKAL være på 4 cifre.");
                }
                else
                {
                    if (client.FindCustomerByPhoneNumber(newCustomer.PhoneNo) == null)
                    {
                        client.InsertCustomer(newCustomer);
                        myCustomers.Add(newCustomer);
                        GetPersons();
                        ClearTextBoxes();
                    }
                    else
                    {
                        MessageBox.Show("Der eksisterer allerede en kunde med dette nummer. Søg på nummeret i stedet, for at tilføje personen til rejsen.");
                        ClearTextBoxes();
                    }
                }
            }
            catch (OverflowException)
            {
                if (phoneNoTextBox.Text.Length != 8)
                {
                    MessageBox.Show("Telefonnummeret SKAL være på 8 cifre.");
                }
                if (zipCodeTextBox.Text.Length != 4)
                {
                    MessageBox.Show("Postnummeret SKAL være på 4 cifre.");
                }
            }
            
        }
        //SearchCustomer
        private void SearchCustomer()
        {
            try
            {
                int phoneNo = Convert.ToInt32(searchTextBox.Text);
                Customer customer = client.FindCustomerByPhoneNumber(phoneNo);
                if (myCustomers.Count == listCount)
                {
                    MessageBox.Show("Der kan ikke tilføjes flere personer end det valgte antal. Hvis du ønsker flere, så tryk afslut og vælg et højere antal.");
                }
                else
                {
                    if (searchTextBox.Text.Length != 8)
                    {
                        MessageBox.Show("Telefonnummeret SKAL være på 8 cifre.");
                    }
                    else
                    {
                        if (myCustomers.Contains(myCustomers.Find(c => c.PhoneNo.Equals(customer.PhoneNo))))
                        {
                            MessageBox.Show("Personen findes allerede på listen.");
                        }
                        else
                        {
                            MessageBoxResult result = MessageBox.Show("Ønsker du at tilføje " + customer.FName + " " + customer.LName + "?", "Bekræft", MessageBoxButton.YesNo);
                            if (result == MessageBoxResult.Yes)
                            {
                                myCustomers.Add(customer);
                                GetPersons();
                                searchTextBox.Clear();
                            }
                            else
                            {
                                searchTextBox.Clear();
                            }
                        }
                    }
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Der må KUN skrives tal i telefonnummerboksen.");
                searchTextBox.Clear();
            }
            catch (NullReferenceException)
            {
                MessageBox.Show("Dette nummer findes ikke i databasen. Prøv et andet, eller opret personen.");
                searchTextBox.Clear();
            }
            catch (OverflowException)
            {
                MessageBox.Show("Telefonnummeret SKAL være på 8 cifre.");
            }
        }

        //Fill listBox
        private void GetPersons()
        {
            listBox.Items.Clear();
            foreach(Customer c in myCustomers)
            {               
                listBox.Items.Add(c.FName + " " + c.LName);
            }
        }

        //button click
        private void BtnCreate_Click(object sender, RoutedEventArgs e)
        {
            CreateCustomer();
        }
        //button søg click
        private void BtnSearch_Click(object sender, RoutedEventArgs e)
        {
            SearchCustomer();
        }
        //færdig
        private void BtnDon_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        //Clear button click
        private void ClearTextBoxes()
        {
            fNameTextBox.Clear();
            lNameTextBox.Clear();
            addressTextBox.Clear();
            zipCodeTextBox.Clear();
            phoneNoTextBox.Clear();
            passNoTextBox.Clear();
        }

        //remove customer
        private void RemovePerson()
        {
            if (listBox.SelectedIndex == -1)
            {
                MessageBox.Show("Markér venligst den person du vil have fjernet fra listen.");
            }
            else
            {
                if (listBox.SelectedIndex == 0)
                {
                    MessageBox.Show("Du kan ikke fjerne dig selv fra listen.");
                }
                else
                {
                    myCustomers.Remove(myCustomers[listBox.SelectedIndex]);
                    listBox.Items.Remove(listBox.SelectedItem);
                }
            }
        }

        //cancel
        private void Cancel()
        {
            myCustomers.Clear();
            myCustomers.Add(mainCustomer);
            Application.Current.MainWindow.Close();
        }

        //clear button click
        private void BtnClear_Click(object sender, RoutedEventArgs e)
        {
            ClearTextBoxes();
        }

        //abort
        private void BtnAbort_Click(object sender, RoutedEventArgs e)
        {
            Cancel();
        }

        //remove button click
        private void BtnRemove_Click(object sender, RoutedEventArgs e)
        {
            RemovePerson();
        }
    }
}
